/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Fachada;

import BD.Conexion;
import DAO.*;
import Interface.iPersistenciaREI;
import java.util.List;
import nivelPersistencia.PersistenciaException;
import objetosNegocio.Arrendador;
import objetosNegocio.MetodoPago;
import objetosNegocio.Residente;

/**
 *
 * @author Christian
 */
public class persistenciaFachada implements iPersistenciaREI {
    
    private Conexion c;
    private Residentes residentes;
    private Arrendadores arrendadores;
    private MetodosPagos mp;
    private Paises p;
    private Estados e;
    private Ciudades cd;
    private Carreras car;
    
    public persistenciaFachada() {
    }
    
    @Override
    public void turnOn() throws PersistenciaException {
        try {
            c = new Conexion("jdbc:mysql://localhost:3306/rei", "root", "crlskvrg");
            residentes = new Residentes("residentes");
            residentes.setConexion(c.getConexion());
            arrendadores = new Arrendadores("arrendadores");
            arrendadores.setConexion(c.getConexion());
            mp = new MetodosPagos("metodosPago", c);
            mp.setConexion(c.getConexion());
            p = new Paises("paises");
            p.setConexion(c.getConexion());
            e = new Estados("estados");
            e.setConexion(c.getConexion());
            cd = new Ciudades("ciudades");
            cd.setConexion(c.getConexion());
            car = new Carreras("carreras");
            car.setConexion(c.getConexion());
        } catch (PersistenciaException ex) {
            ex.printStackTrace();
            throw new PersistenciaException("Error al conectar con la base de datos.");
        }
    }
    
    @Override
    public void addResidente(Residente residente) throws PersistenciaException {
        residentes.addResidente(residente);
    }
    
    @Override
    public void deleteResidente(Residente residente) throws PersistenciaException {
        residentes.deleteResidente(residente);
    }
    
    @Override
    public void updateResidente(Residente residente) throws PersistenciaException {
        residentes.updateResidente(residente);
    }
    
    @Override
    public List<Residente> listOfResidentes() throws PersistenciaException {
        return residentes.listOfResidentes();
    }
    
    @Override
    public Residente getResidente(Residente residente) throws PersistenciaException {
        return residentes.getResidente(residente);
    }

    @Override
    public void updateMetodoPagoResidente(Residente r, String nuevoTipo) throws PersistenciaException {
        mp.actualizaMetodoPagoResidente(r, nuevoTipo);
    }
    
    @Override
    public int addArrendador(Arrendador arrendador) throws PersistenciaException {
        return arrendadores.addArrendador(arrendador);
    }

    @Override
    public void updateArrendador(Arrendador arrendador) throws PersistenciaException {
        arrendadores.updateArrendador(arrendador);
    }
    
    @Override
    public void deleteArrendador(Arrendador arrendador) throws PersistenciaException {
        arrendadores.deleteArrendador(arrendador);
    }
    
    @Override
    public List<Arrendador> listOfArrendadores() throws PersistenciaException {
        return arrendadores.listOfArrendadores();
    }
    
    @Override
    public Arrendador getArrendador(Arrendador arrendador) throws PersistenciaException {
        return arrendadores.getArrenadador(arrendador);
    }
    
    @Override
    public int agregarMetodoPagoResidente(MetodoPago m) throws PersistenciaException {
        return mp.addMetodoPagoResidente(m);
    }
    
    @Override
    public MetodoPago getMetodoPago(Residente residente) throws PersistenciaException {
        return mp.getMetodoPago(residente);
    }

    @Override
    public void deleteMetodoPagoResidente(Residente residente) throws PersistenciaException {
        mp.deleteMetodoPagoResidente(residente);
    }
    
    @Override
    public List<String> listOfCiudades(int estado) throws PersistenciaException {
        return cd.getCiudades(estado);
    }
    
    @Override
    public int getIdCiudad(String name) throws PersistenciaException {
        return cd.getIdCiudad(name);
    }

    @Override
    public String getCiudad(int index) throws PersistenciaException {
        return cd.getCiudad(index);
    }
    
    @Override
    public List<String> listOfEstados(int pais) throws PersistenciaException {
        return e.getEstados(pais);
    }
    
    @Override
    public int getIdEstado(String name) throws PersistenciaException {
        return e.getIdEstado(name);
    }

    @Override
    public String getEstado(int index) throws PersistenciaException {
        return e.getEstado(index);
    }
    
    @Override
    public List<String> listOfPaises() throws PersistenciaException {
        return p.getPaises();
    }
    
    @Override
    public int getIdPais(String name) throws PersistenciaException {
        return p.getIdPais(name);
    }

    @Override
    public String getPais(int index) throws PersistenciaException {
        return p.getPais(index);
    }
    
    @Override
    public List<String> listOfCarreras() throws PersistenciaException {
        return car.getCarreras();
    }

    @Override
    public int getIdCarrera(String name) throws PersistenciaException {
        return car.getIdCarrera(name);
    }

    @Override
    public String getNameCarrera(int index) throws PersistenciaException {
        return car.getNameCarrera(index);
    }
    
    @Override
    public void turnOff() throws PersistenciaException {
        try {
            c.close();
        } catch (PersistenciaException ex) {
            throw new PersistenciaException("Error al cerrar la conexion de base de datos.");
        }
    }
}
